// const str = 'will is good boy'

// console.log(str.charAt(2)) // 返回指定索引的字符

// console.log(str.charCodeAt(2)) // charCodeAt返回指定码元的字符编码

// console.log(0x63.toString(10))


// console.log(String.fromCodePoint(0x1F60A)) //fromCharCode()方法用于根据给定的UTF-16码元创建字符串中的字符。这个方法可以接受任意多个数值，并返回将所有数值对应的字符拼接起来的字符串：


// let message = "aabae"
// console.log(message.charAt(1))
// console.log(message.charAt(3))
// console.log(message.length)
// console.log(message.codePointAt(0))
// console.log(message.codePointAt(1))
// console.log(message.codePointAt(4))

// const str = String.fromCharCode(97, 98, 55357, 56842, 100, 101)

// console.log(str.charCodeAt(0))
// console.log(str.codePointAt(0))
// console.log(str.charAt(0))
// console.log(str.charCodeAt(1))
// console.log(str.codePointAt(1))
// console.log(str.charAt(1))
// console.log(str.charCodeAt(2))
// console.log(str.codePointAt(2))
// console.log(str.charAt(2))


// str.normalize(以那种规范形式)
//"NFC"、"NFD"、"NFKC"或 之一"NFKD"，指定 Unicode 规范化形式。如果省略或 undefined，"NFC"则使用。

// concat  用于将一个或者多个字符拼接成字符串,此方法不影响原字符串



// console.log('hello '.concat('world','!'))


//字符串提取的方法 slice substr substring
// let arr = ['a', 'c', 'b']
// console.log('a'.charCodeAt())
// console.log('c'.charCodeAt())
// console.log('b'.charCodeAt())

// const str = 'hello world!'
// console.log(str.slice(1,2))
// console.log(str.substr(1,2)) // substr第二个参数表示截取的个数 slice substring第二个参数表示截取的结束位置，但是不包含结束位置。
// console.log(str.slice(-10,3))
// console.log(str.substr(-10,-1))

// 查找字符串 indexOf lastIndexOf，他们接受两个参数，第一个表示查找那个字符，第二个参数表示从那里开始查找


// starstWidth  endsWidth  includes

// trim 不会修改元字符串 trimLeft() trimRight()

// repeat(10)复制字符串多少次

// console.log('2'.padStart(2,0))
// const str = 'hello'
// const strIterator =  str[Symbol.iterator]()
// console.log(strIterator.next())
// console.log(strIterator.next())
// console.log(strIterator.next())
// console.log(strIterator.next())
// console.log(strIterator.next())
// console.log(strIterator.next())

// const arr = [1,2,3,4]

// console.log(arr[Symbol.iterator]())

// 注意for  of 循环能够循环原型上面有迭代器的数据类型

// const str = 'hello'
// for(let index in str) {
//   console.log(str[index])
// }
// 有了这个迭代器，字符串就可以使用解构操作符来解构了，比如可以很方便的把字符串分割成数组

// let str = 'hello'

// console.log([...str])
// let stringValue = 'hello world'

// console.log(stringValue.toLowerCase())
// console.log(stringValue.toUpperCase())

// console.log(stringValue.toLocaleLowerCase())
// console.log(stringValue.toLocaleUpperCase())


// match  search replaceAll replace


// replace 如果第一个参数是字符串，那么只会替换第一个子字符串
// 要想替换所有的第一个参数必须是正则表达式且必须是全局匹配

// let colorText = "red,blue,green,yellow";

// let reg = /[^,]+/g

// console.log(reg.exec(colorText))
// console.log(reg.exec(colorText))
// console.log(reg.exec(colorText))
// console.log(reg.exec(colorText))
// console.log(reg.exec(colorText))
//localeCompare

// enCodeURIComponent() deCodeURIComponent() 一般用于编码｜解码url后面的参数
// enCodeURI() deCodeURI()  一般用于编码｜解码整个url

// eval("console.log(9999)")

console.log('hello'.search('o')) // 收到返回对应的索引，没有收到返回-1  indexOf() lastIndexOf() includes()
// match replace() replaceAll()